Работа с мышью и клавиатурой

Работа с мышью

задача:

При нажатии кнопки возникает в случайном месте экрана и тут же исчезает маленькая окружность. Вы должны поточнее щелкнуть мышкой там, где она была. После щелчка компьютер сообщает вам, на каком расстоянии от центра окружности было острие мышиного курсора во время щелчка.

Для создания программы нам необходимо поближе познакомиться с событиями, возникающими при работе с мышью.

 Поскольку щелкать мышью мы будем над формой, то в левой части Object Browser выберем объект Form. В правой части отыщем события, связанные с мышью. Нас пока интересует 5 событий: Click (щелчок), DblClick (двойной щелчок), MouseDown (нажали клавишу мыши), MouseUp (отпустили клавишу мыши), MouseMove (сдвинули мышь).

События Click и DblClick нам не подойдут, так как они ничего не го­ворят о координатах мыши во время щелчка.

А вот MouseDown подойдет, так как координаты сообщает.

События MouseDown и MouseUp

Зайдем в окно кода и выберем для объекта Form событие MouseDown.

В окне кода появится следующая заготовка:

Private Sub Form_MouseDown (Button As Integer,  Shift As Integer, _

X  As Single,  Y As Single)

 End Sub

Четыре параметра в скобках - это 4 вещи, которые компьютер сообщает процедуре в момент события:

      Button - какая из трех кнопок мыши была нажата;

      Shift - были ли при этом в нажатом состоянии служебные клавиши на клавиатуре и какие именно;

      X, Y - координаты острия курсора мыши во время нажатия.

Для того чтобы понять и проверить смысл этих параметров, прочтите (чтобы понять) и запустите (чтобы проверить) такую программу:

 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

'Определяем, какая клавиша мыши нажата: Select Case Button

Case 1:           Print "Нажата левая клавиша"

Case 2:           Print "Нажата правая клавиша"

Case 4:           Print "Нажата средняя клавиша" End Select

'Определяем, какие из трех клавиш клавиатуры (Shift, Ctrl, Alt) были при этом

'в нажатом состоянии: Select Case Shift

Case 0:           Print "He нажата ни одна клавиша Shift, Ctrl, Alt"

Case 1:           Print "Нажата клавиша Shift"

Case 2:           Print "Нажата клавиша Ctrl"

Case 3:           Print "Нажаты клавиши Shift, Ctrl"

Case 4:           Print "Нажата клавиша Alt"

Case 5:           Print "Нажаты клавиши Shift, Alt"

Case 6: ,        Print "Нажаты клавиши Ctrl, Alt"

Case 7:           Print "Нажаты клавиши Shift, Ctrl, Alt" End Select   

'Определяем координаты острия курсора мыши во время нажатия:     

  Print "X="; X, "Y="; Y

End Sub

В численном значении Shift есть система. (Не путайте переменную Shift с клавишей Shift.) Посмотрите в процедуре, чему "равны" клавиши Shift, Ctrl, Alt поодиночке.

 Одному, двум и четырем. Так вот, их совместное нажатие "равно" их сумме. Убедитесь .

Поместите на форму несколько разных объектов.

Обратите внимание, что при щелчке по ним процедура не срабатывает.

Это естественно: у каждого объекта есть свое событие MouseDown. Событие MouseUp работает аналогично.

Мышь рисует:
Вот программа, превращающая мышку в карандаш:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
PSet(X, Y)
End Sub
Запустите ее и медленно ведите мышкой по форме. За мышкой остается нарисованный след.
Работа с клавиатурой
Поставим задачу сделать игру, где наш миниатюрный гоночный автомобиль будет под управлением клавиш клавиатуры нестись от старта до финиша. Для этого вам нужно познакомиться с событиями, связанными с клавиатурой. Их 3: KeyDown (клавиша нажата), KeyUp (клавиша отпущена) и KeyPress (по клавише щелкнули). Нас пока интересуют только первые 2.
События KeyDown и KeyUp
Создайте проект из одной формы, без элементов управления. Зай¬дите в окно кода и выберите для объекта Form событие KeyDown. В появившуюся заготовку процедуры запишите следующий код: Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'Определяем, какая клавиша клавиатуры была нажата: Select Case KeyCode
Case vbKeyUp: Print "Нажата стрелка вверх"
Case vbKeyDown: Print "Нажата стрелка вниз"
Case vbKeyLeft: Print "Нажата стрелка налево"
Case vbKeyRight: Print "Нажата стрелка направо"
Case vbKeyW: Print "Нажата клавиша W"
Case vbKey7: Print "Нажата клавиша 7"
Case vbKeySpace: Print "Нажата клавиша пробела"
Case vbKeyDelete: Print "Нажата клавиша Delete"
Case vbKeyF4: Print "Нажата клавиша F4"
Case vbKeyAdd: Print "Нажата клавиша +"
Case vbKeyEscape: Print "Нажата клавиша Esc"
End Select
-'Определяем, какие из трех клавиш клавиатуры (Shift, Ctrl, Alt) при этом 'были в нажатом состоянии:
Select Case Shift
Case 0: Print "He нажата ни одна клавиша Shift, Ctrl, Alt"
Case 1: Print "Нажата клавиша Shift"
Case 2: Print "Нажата клавиша Ctrl"
Case 3: Print "Нажаты клавиши Shift, Ctrl"
Case 4: Print "Нажата клавиша Alt"
Case 5: Print "Нажаты клавиши Shift, Alt"
Case 6: Print "Нажаты клавиши Ctrl, Alt"
Case 7: Print "Нажаты клавиши Shift, Ctrl, Alt"
End Select
End Sub
Два параметра в скобках заголовка процедуры - это 2 вещи, кото¬рые компьютер сообщает процедуре в момент события:
• KeyCode код нажатой клавиши. На клавиатуре - 100 с лишним клавиш. На каждой - по 2 буквы или 2-3 других символа. Компь¬ютер различает клавиши независимо от того, какие значки на них нанесены. Так мать различает сыновей независимо от того, что на¬писано у них на майках. У каждого сына есть имя, у каждой кла¬виши есть код (KeyCode). Итак, попросту говоря, компьютер сооб¬щает процедуре, какая клавиша была нажата. Полный список кодов находится в Object Browser (класс KeyCode Constants).
• Shift - были ли при этом в нажатом состоянии клавиши клавиатуры (Shift, Ctrl, Alt) и какие именно. В численном значении Shift - та же система, что и в событии MouseDown. Совместное нажатие клавиш Shift, Ctrl, Alt "равно" сумме их нажатий поодиночке (1, 2 и 4).

Задать вопрос.

 

 ТЕСТ   Практическое задание

Hosted by uCoz